import axios from 'axios'
import { useUserStore } from '../stores'

// 创建axios实例
const request = axios.create({
  baseURL: '/api/demo', // 公共API服务器地址
  timeout: 10000, // 请求超时时间
  headers: {
    'Content-Type': 'application/json;charset=utf-8'
  },
  withCredentials: true // 允许携带cookie，有助于处理某些CORS场景
})

// 请求拦截器
request.interceptors.request.use(
  config => {
    console.log('请求URL:', config.url);
    console.log('请求方法:', config.method);
    console.log('请求参数:', config.params);
    console.log('请求数据:', config.data);

    // 从localStorage中获取token（优先）和用户状态（备用）
    const tokenFromStorage = localStorage.getItem('token');
    let token = tokenFromStorage;

    // 双重检查：如果localStorage中没有token，尝试从用户状态中获取
    if (!token) {
      try {
        // 避免在服务器端渲染时调用
        if (typeof window !== 'undefined') {
          const userStoreJson = localStorage.getItem('userStore');
          if (userStoreJson) {
            const userStoreData = JSON.parse(userStoreJson);
            token = userStoreData?.token;
          }
        }
      } catch (error) {
        console.error('获取备用token时出错:', error);
      }
    }

    // 确保添加token到请求头
    if (token) {
      config.headers['Authorization'] = `Bearer ${token}`;
      console.log('已添加token到请求头');
    } else {
      console.warn('未找到有效的token');
    }

    return config
  },
  error => {
    console.error('请求错误:', error)
    return Promise.reject(error)
  }
)

// 响应拦截器
request.interceptors.response.use(
  response => {
    console.log('响应数据:', response);
    console.log('响应状态码:', response.status);
    console.log('响应数据详情:', response.data);
    const res = response.data
    // 可以根据后端返回的状态码进行相应处理
    return res
  },
  error => {
    console.error('响应错误:', error);
    console.error('错误详情:', {
      status: error.response?.status,
      data: error.response?.data,
      headers: error.response?.headers,
      config: error.config,
      message: error.message,
      stack: error.stack
    });

    // 特别处理500错误，提供更详细的信息
    if (error.response && error.response.status === 500) {
      console.error('500内部服务器错误详情:', {
        requestUrl: error.config?.url,
        requestMethod: error.config?.method,
        requestData: error.config?.data,
        responseBody: error.response?.data
      });
    }

    // 处理401未授权错误
    if (error.response && error.response.status === 401) {
      // 清除用户信息并跳转到登录页
      const userStore = useUserStore()
      userStore.logout()
      window.location.href = '/#/login'
    }

    return Promise.reject(error)
  }
)

export default request